package factoryp;

public class MainTest {
    public static void main(String[] args) {
        //最基础写法
        /**
         * 先 造车,再用车(得需要知道是什么车,怎么造)
         * */
        CarInterface carAudi =new Audi();
        CarInterface carBMW =new BMW();
        CarInterface carTesla =new Tesla();
        carAudi.say();
        carBMW.say();
        carTesla.say();
        //加入工厂模式
        System.out.println("--------------join Factory-----------------------");
        /**
         *直接用(你需要什么车,只需要提供名字,有就给你,你不用再考虑车是怎么造出来的)
         **/
        CarFactory carFactory =new CarFactory();
        CarInterface  car =carFactory.getCar("Audi");
        carFactory.getCar("BMW");
        carFactory.getCar("Tesla");
        /**
         * 1.使用场景:明确知道不同条件下创建不同实例时;
         *  (1):开发实例:连接数据库时只需要换驱动和账户信息就可以,如MySQL与SqlServer之间切换
         *  (2):生活实例:买车时,你要买一辆奥迪车.卖车的就会给你推荐奥迪相关的车.
         * 2.优点
         *  (1)扩展性高(新增品牌车辆,只需要添加车辆的实现类即可)
         *  (2)使得调用者更加方便(你要用车,只用说名字就可以了,是不是很方便)
         *  (3)屏蔽了实现的步骤,安全性提高,只用关心产品的接口
         * 3.缺点
         *  (1)实现类增多
         *  (2)系统复杂度增加
         * */
    }
}
